home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
powervww
/
w.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-01-05
|
48KB
|
1,420 lines
// ____________________________________________________
// | |
// | Project: POWER VIEW IDE |
// | File: W.CPP |
// | Compiler: WPP386 (10.6) |
// | |
// | Subject: Main module and PV interface |
// | |
// | Author: Emil Dotchevski |
// |____________________________________________________|
//
// E-mail: zajo@geocities.com
// URL: http://www.geocities.com/SiliconValley/Bay/3577
#define uses_ctype
#define uses_stdio
#define uses_string
#define uses_app
#define uses_calc
#define uses_comlin
#define uses_desk
#define uses_icons
#define uses_init
#define uses_editor
#define uses_help
#define uses_ht
#define uses_stddlg
#define uses_system
#define uses_table
#define uses_tetris
#define uses_txt
#include "PVUSES.H"
#include "COMPILE.H"
#include "TLOG.H"
#include "TPROJECT.H"
#include "OPTIONS.H"
#define _DECLARE_W_H
#include "W.H"
#undef _DECLARE_W_H
/*
DEFINES
*/
#define MAX_CLOSED_FILES 64
#define MAX_MENU_CLOSED_FILES 9
#define MAX_CLOSED_FILE_LENGTH 25
#define cmFILE_OPEN_CURS 0x1010
#define cmCLIPBOARD 0x1011
#define cmCONDENSE 0x1012
#define cmCOM_COMPILE 0x1013
#define cmCOM_MAKE 0x1014
#define cmCOM_BUILD 0x1015
#define cmCOM_LINK 0x1016
#define cmCOM_TIMECHECK 0x1017
#define cmCOM_NEXTERR 0x1018
#define cmCOM_PREVERR 0x1019
#define cmCOM_RUN 0x101A
#define cmCOM_PARAMS 0x101B
#define cmPRJ_OPEN 0x1020
#define cmPRJ_CLOSE 0x1021
#define cmPRJ_EXPORT 0x1022
#define cmOPT_FAST 0x1030
#define cmOPT_COM_CODE 0x1031
#define cmOPT_COM_ADVCODE 0x1032
#define cmOPT_COM_TARGET 0x1033
#define cmOPT_COM_SEGS 0x1034
#define cmOPT_COM_FP 0x1035
#define cmOPT_COM_DEBUG 0x1036
#define cmOPT_COM_EXC 0x1037
#define cmOPT_COM_OPT 0x1038
#define cmOPT_COM_MSG 0x1039
#define cmOPT_COM_PRE 0x103A
#define cmOPT_COM_NAMES 0x103B
#define cmOPT_LINKER 0x103C
#define cmOPT_EDITOR 0x103D
#define cmOPT_DIRS 0x103E
#define cmOPT_TOOLS 0x103F
#define cmOPT_OPEN 0x1040
#define cmOPT_SAVE 0x1041
#define cmOPT_SAVE_AS 0x1042
#define cmWIN_CALCULATOR 0x1050
#define cmWIN_TETRIS 0x1051
#define cmWIN_PROJECT 0x1052
#define cmWIN_LOG 0x1053
#define cmWIN_DOS_SCREEN 0x1054
#define cmWINDOW_CLOSED_WINDOWS 0x1060
#define cmCLOSED_FILES 0x1061
#define cmTOOLS 0x1070
/*
STRUCTS
*/
struct Tcmd_file
{
char *filename;
Tcmd_file *next;
};
/*
STATIC DATA
*/
static Tcmd_file *cmd_files=NULL;
static Tlb_list closed_files;
static char menu_titles[MAX_MENU_CLOSED_FILES][MAX_CLOSED_FILE_LENGTH+5];
static Tmenu_item *file_exit_ptr;
static Tmenu *file_menu_ptr;
static boolean disable_closed_files = 0;
static char wst_signature[] = "\r\nPower View IDE status file.\r\n\032";
/*
CONSTRUCT FILENAMES
*/
char *tmp_fname( char *result, char *fname )
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
_splitpath( fname, drive, dir, NULL, NULL );
if( *drive || *dir )
strcpy( result, fname );
else
{
strcpy( result, default_directories.tmp_files );
strcat( result, fname );
}
return result;
}
char *exe_fname( char *result, char *path )
{
char fname[_MAX_FNAME];
strcpy( result, default_directories.objects );
_splitpath( path, NULL, NULL, fname, NULL );
strcat( result, fname );
return result;
}
char *exe_file( char *result, char *path )
{
return strcat( exe_fname(result,path), ".EXE" );
}
char *obj_file( char *result, char *path )
{
char fname[_MAX_FNAME];
strcpy( result, default_directories.objects );
_splitpath( path, NULL, NULL, fname, NULL );
strcat( result, fname );
strcat( result, ".OBJ" );
return result;
}
char *target_file( char *result, char *path )
{
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
_splitpath( path, drive, dir, NULL, NULL );
*result = 0;
if( *drive==0 && *dir==0 )
strcpy( result, default_directories.objects );
strcat( result, path );
return result;
}
/*
FILE I/O
*/
static void update_closed_files( void )
{
char buffer[_MAX_PATH];
if( disable_closed_files ) return;
update_menu( file_menu_ptr, file_exit_ptr );
if( closed_files.vcount ) mitem();
for( int i=0; i<closed_files.vcount && i<MAX_MENU_CLOSED_FILES; i++ )
{
Tedit_window_status *ew = (Tedit_window_status *)closed_files.getptr(i);
short_path( min_path(strcpy(buffer,ew->file_name)), MAX_CLOSED_FILE_LENGTH-1 );
sprintf( menu_titles[i], "|~%d %s", i+1, buffer );
_help( htFILE_CLOSED_FILES );
mitem( menu_titles[i], cmCLOSED_FILES+i );
}
if( closed_files.vcount )
{
_help(htWINDOW_CLOSED_WINDOWS);
mitem( "|~0 Closed windows list", cmWINDOW_CLOSED_WINDOWS );
}
update_menu( NULL, NULL );
}
static void file_opened( Tedit_window *w )
{
if( disable_closed_files ) return;
char *fn = w->editor->text_editor->file_name;
if( *fn )
for( int i=0; i<closed_files.vcount; i++ )
{
Tedit_window_status *ew = (Tedit_window_status *)closed_files.getptr(i);
if( !strcmp(fn,ew->file_name) )
{
w->restore_status( *ew );
w->set_state( isICONIZED, 0 );
closed_files.del(i);
update_closed_files();
return;
}
}
w->resize( desktop_xl, desktop_yl - ( desktop_yl / 3 ) );
}
static void file_closed( Tedit_window *w )
{
char *fn = w->editor->text_editor->file_name;
uint bl = w->editor->text_editor->buf_len;
if( disable_closed_files || *fn==0 || bl==0 ) return;
Tedit_window_status ew;
w->save_status( ew );
closed_files.ins( 0, &ew );
while( closed_files.vcount>MAX_CLOSED_FILES )
closed_files.del( closed_files.vcount-1 );
update_closed_files();
}
static boolean __editor_path = 0;
static char *search_file( char *buffer )
{
if( *buffer )
{
char filespec[_MAX_PATH], *b, *s;
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
FILE *f = NULL;
fexpand( buffer );
add_ext( buffer, editor_options.extension );
strcpy( filespec, buffer );
f = fopen( buffer, "rb" );
if( __editor_path && f==NULL && current_editor!=NULL )
{
_splitpath( ((Tfile_editor *)current_editor->editor)->text_editor->file_name, drive, dir, NULL, NULL );
_splitpath( buffer, NULL, NULL, fname, ext );
_makepath( buffer, drive, dir, fname, ext );
f = fopen( buffer, "rb" );
}
__editor_path = 0;
for( s=b=default_directories.include; f==NULL; s++ )
if( *s==';' || *s==0 )
{
char saved = *s;
*s = 0;
_splitpath( filespec, NULL, NULL, fname, ext );
_splitpath( b, drive, dir, NULL, NULL );
_makepath( buffer, drive, dir, fname, ext );
f = fopen( buffer, "rb" );
*s = saved;